{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第九周作业"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分类训练"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 机器学习的Hello Word ，一个新的分类算法，都会在MNIST上查看执行结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# pack 打包 UnPack 解包\n",
    "# pack  把2打包为二进制\n",
    "import struct"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "b'\\x00\\x00\\x00\\x02'"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "struct.pack('>i',2)# 把2打包为int类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2051, 60000, 28, 28)\n",
      "47040000\n"
     ]
    }
   ],
   "source": [
    "#读取文件\n",
    "with open('./MNIST_data/train-images-idx3-ubyte','rb') as f:\n",
    "    boffer=f.read(4*4) #读取4个int 每个int类型占4个字节，也就是读取前四个\n",
    "    head=struct.unpack('>iiii',boffer) # 解压为4个int类型\n",
    "    print(head)\n",
    "    length=head[1]*head[2]*head[3] #计算接下来要读取的像素长度\n",
    "    print(length)\n",
    "    buffer=f.read(length)\n",
    "    data=struct.unpack('>{}B'.format(length),buffer) #B代表byte\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### head=(2051, 60000, 28, 28)  60000个图片，28行28列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#显示图片\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "imgs = np.reshape(data,(head[1],head[2],head[3]))\n",
    "for i in range(5):\n",
    "    plt.imshow(imgs[i],cmap='gray')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\feature_extraction\\text.py:17: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working\n",
      "  from collections import Mapping, defaultdict\n"
     ]
    }
   ],
   "source": [
    "from sklearn.datasets import fetch_mldata\n",
    "mnist = fetch_mldata('MNIST original',data_home='./')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'DESCR': 'mldata.org dataset: mnist-original',\n",
       " 'COL_NAMES': ['label', 'data'],\n",
       " 'target': array([0., 0., 0., ..., 9., 9., 9.]),\n",
       " 'data': array([[0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        ...,\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0]], dtype=uint8)}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mnist"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   * DESCR 数据级描述\n",
    "   * COL_Names 列名"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "x,y=mnist['data'],mnist['target']# 训练集 ，测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(70000, 784)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(70000,)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "some_digit=x[36000] \n",
    "some_digit_image=some_digit.reshape(28,28)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(some_digit_image,cmap=matplotlib.cm.binary)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5.0"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y[36000]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 建立测试集和训练集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 切分X，Y的测试集与训练集\n",
    "x_train,x_test,y_train,y_test=x[:60000],x[60000:],y[:60000],y[60000:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 2360, 47269, 24216, ..., 43022, 13856, 12621])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#将数据集合交叉洗牌，交叉验证时，每个子集合分布均匀，有些机器学习算法对训练实例的顺序敏感\n",
    "import numpy as np\n",
    "shuffle_index=np.random.permutation(60000)\n",
    "shuffle_index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "#将数据打乱\n",
    "x_train,y_train=x_train[shuffle_index],y[shuffle_index]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 训练一个二元分类器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False, False, False, ..., False, False, False])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#识别数字5，二元分类5 或者非 5\n",
    "# 创建目标向量\n",
    "y_train_5=(y_train==5)\n",
    "y_train_5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[False, False, False, ..., False, False, False],\n",
       "       [False, False, False, ...,  True, False, False],\n",
       "       [False, False, False, ..., False, False, False],\n",
       "       ...,\n",
       "       [False, False, False, ..., False, False, False],\n",
       "       [False, False, False, ...,  True, False,  True],\n",
       "       [False, False, False, ..., False, False, False]])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 重排，20行\n",
    "y_train_5.reshape(20,-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False, False, False, ..., False, False, False])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_test_5=(y_test==5)\n",
    "y_test_5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "#SGD 梯度下降 分类器 适合非常大的数据集，独立处理训练集数据，一次一个，适合在线学习\n",
    "from sklearn.linear_model import SGDClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ True])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 初始化对象，随机因子random_state=42\n",
    "sgd_clf=SGDClassifier(random_state=42)\n",
    "sgd_clf.fit(x_train,y_train_5)\n",
    "sgd_clf.predict([some_digit])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 性能考核"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 使用交叉验证测量精度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([0.95555, 0.9658 , 0.96175])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 评估分类器比评估回归器要困难的多\n",
    "from sklearn.model_selection import cross_val_score\n",
    "# CV =3 3个折叠 正确率达到95%以上,把训练集分成3分进行交叉运算\n",
    "cross_val_score(sgd_clf,x_train,y_train_5,cv=3,scoring='accuracy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 把每张图都分类成 非5\n",
    "from sklearn.base import BaseEstimator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 估算分类器\n",
    "class Never5Classifier(BaseEstimator):\n",
    "    def fit(self,x,y=None):\n",
    "        pass\n",
    "    def predict(self,x):\n",
    "        return np.zeros((len(x),1),dtype=bool)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[False],\n",
       "       [False],\n",
       "       [False],\n",
       "       ...,\n",
       "       [False],\n",
       "       [False],\n",
       "       [False]])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.zeros((len(x),1),dtype=bool)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.90795, 0.9122 , 0.9088 ])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "never_5_clf=Never5Classifier()\n",
    "cross_val_score(never_5_clf,x_train,y_train_5,cv=3,scoring='accuracy')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   * 准确率超过90%，因为5的图像大约只有10%，你猜一张图不是5，90%的时间你都是正确的\n",
    "   * 这说明准确率无法成为分类器的首要性能指标，特别时当你处理偏科数据集，某些类比其他类更为频繁"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 混淆矩阵"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   *  评估分类器性能的更好方法时混淆矩阵\n",
    "   * A类别实例被分为B类别的次数\n",
    "   * 想要知道分类器将3和5混淆多少次，通过混淆矩阵的5行3列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import cross_val_predict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "y_train_pred=cross_val_predict(sgd_clf,x_train,y_train_5,cv=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False, False, False, ..., False, False, False])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train_pred"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 与cross_val_score 相比"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   * 同样执行交叉验证\n",
    "   * 返回的不是评估分数，是每个折叠的预测\n",
    "   * 每一个实例在模型预测时使用的数据，在训练期间从未见过"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[54217,   362],\n",
       "       [ 1976,  3445]], dtype=int64)"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import confusion_matrix #导入混淆矩阵\n",
    "\n",
    "confusion_matrix(y_train_5,y_train_pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   * 行代表实际类别，列代表预测类别\n",
    "   * 1行1列 被正确分为非 5 真负类\n",
    "   * 1行2列 被错误的分为5，假正类\n",
    "   * 2行1列 被错误的分为非5，假负类\n",
    "   * 2行2列 被正确的分在了5，真正类\n",
    "   * 这种衡量方式太复杂，我可以使用更简单的指标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[54579,     0],\n",
       "       [    0,  5421]], dtype=int64)"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train_perfect_predictions=y_train_5\n",
    "confusion_matrix(y_train_5,y_train_perfect_predictions)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 正类预测的准确吕被称为分类器的精度\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 精度=TP/(TP+FP)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### TP 是真正类的数量，FP是假正类的数量 \n",
    "##### 召回率TPR=TP/(TP+FN) \n",
    "#####  检测正类实例的比例，FN是假负类的数量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 精度和召回率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9049120042027844"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import precision_score,recall_score\n",
    "precision_score(y_train_5,y_train_pred)# 4327/4327+1278"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6354916067146283"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recall_score(y_train_5,y_train_pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   * 说明检测一张图的适合，只有88%的数字是准确的，而且只有66%的数字5被检测出来\n",
    "   * 精度和召回率合成单一招标，称为F1分数 谐波平均值\n",
    "   * 平均值平等对待所有的值，谐波平均值会给予较低值更高的权重，只有召回率和精度都很高时，才能获得较高的F1分数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import f1_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7466406588643261"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f1_score(y_train_5,y_train_pred) # 计算F1分数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   * F1分数对具有相近精度和召回率  分类器更有利，这不一定符合你得期望\n",
    "   * 有适合你更关心精度，有时候你你更关心召回率\n",
    "   * 训练一个分类器检测儿童可以放心观看的视频，你可能要求拦截了很多好的视频，低召回率,保留下来的都是安全的视频\n",
    "   * 不能同时增加精度并较少召回率，反之亦然"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 精度/召回率权衡"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   * SGDClassifier对每个实例基于决策函数计算一个分值，大于阀值为正类否则为负类\n",
    "   * 中间阀值右侧找到4个真正类 真5 一个假正类，精度为4/5 80%\n",
    "   * 在所有的6个真正的5中，分类器找到了4个，召回率为4/6 67%\n",
    "   * 提高阀值，向右移动，精度提高，找回降低\n",
    "   * 反之阀值降低，召回率高，精度降低\n",
    "   * Sklearn不可以直接设置阀值，可以访问决策分数\n",
    "   * SGDClassifier 默认阀值为0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 返回决策值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([114959.3393978])"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_scores=sgd_clf.decision_function([some_digit])\n",
    "y_scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True])"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "threshold=0\n",
    "y_some_digit_pred=(y_scores>threshold)\n",
    "y_some_digit_pred"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 提高阀值可以降低召回率，提高阀值到200000，\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False])"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "threshold=200000\n",
    "y_some_digit_pred=(y_scores>threshold)\n",
    "y_some_digit_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "y_scores=cross_val_predict(sgd_clf,x_train,y_train_5,cv=3,method='decision_function')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(60000,)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_scores.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import precision_recall_curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "precisions,recalls,thresholds=precision_recall_curve(y_train_5,y_scores)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 使用metrics绘制精度和召回相对于阀值的函数图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_precision_recall_vs_threshold(precision,recalls,thresholds):\n",
    "    plt.plot(thresholds,precisions[:-1],'b--',label='Precision',linewidth=2)\n",
    "    plt.plot(thresholds,recalls[:-1],'g-',label='Recall',linewidth=2)\n",
    "    plt.xlabel('Threshold',fontsize=16)\n",
    "    plt.legend(loc='upper left',fontsize=16)\n",
    "    plt.ylim([0,1])\n",
    "plt.figure(figsize=(8,4))\n",
    "plot_precision_recall_vs_threshold(precisions,recalls,thresholds)\n",
    "plt.xlim([-700000,700000])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:214: RuntimeWarning: Glyph 21484 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:214: RuntimeWarning: Glyph 22238 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:214: RuntimeWarning: Glyph 31934 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:214: RuntimeWarning: Glyph 24230 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:183: RuntimeWarning: Glyph 21484 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:183: RuntimeWarning: Glyph 22238 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:183: RuntimeWarning: Glyph 31934 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:183: RuntimeWarning: Glyph 24230 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_precision_vs_recall(precisions,recalls):\n",
    "    plt.plot(recalls,precisions,'b-',linewidth=2)\n",
    "    plt.xlabel('召回',fontsize=16)\n",
    "    plt.ylabel('精度',fontsize=16)\n",
    "    plt.axis([0,1,0,1])\n",
    "\n",
    "plt.figure(figsize=(8,6))\n",
    "plot_precision_vs_recall(precisions,recalls)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 通过选择阀值来实现最佳的精度/召回率权衡"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 目标设定为90%的精度，阀值大概在70000左右\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train_pred_90=(y_scores>700000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "precision_score(y_train_5,y_train_pred_90)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0016602102933038186"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recall_score(y_train_5,y_train_pred_90)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 总结\n",
    "   * 获得了一个90%精度的分类器，但如果召回太低，精度再高，也没有实际用处\n",
    "   * 如果工作中，需要99%的精度，你应该回应，召回率是多少"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Roc曲线\n",
    "   本质是真正类率TPR 和假正类率 FPR （错误的分为正类的负类实例比例）\n",
    "   与召回/精度曲线非常相似"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import roc_curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "fpr,tpr,thresholds=roc_curve(y_train_5,y_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.rcParams['font.sans-serif']=['SimHei']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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jf79+1NSUkJ0dDR16tRxOpaII0JZ+jnAoWWxicd57fbAi9ba7cB0oNQfxa21L1pr06216XXr1qVuUiwAHs3ui0hQSUkJDzzwAL169SIhIYF//etfREVpNlAiWyj/BqwkMKX/KZAGrCvlmO+AFsHH6cDmsjzx8k2BkX7TWvGnHFJEqr99+/Zx5ZVXsnTpUoYPH84zzzxDYmKi07FEHFehsbExJqEC3/ZfYJgx5ilgAPCVMebhY455CehpjPkQuAn4c1me+FDZR2moLyJAcnIyjRo1Yvr06bz66qsqfJGgio70dxtjZgH/At611h482VVqPX4AACAASURBVDdYaw8YYzKA3sCfglP4WccccxC4trxhSnyBbXgT4zR1JxKp8vPzuf/++7nlllto2rQp//znP52OJBJ2Kjo0vgr4HrgH2GmMec8YM9wYc8J9cK21e621bwYLv9IU+QK31o3WSF8kIq1du5bOnTvz5JNP8sEHHzgdRyRsVaglrbVzrbV3WmvbAq2B94FfA98bY0L+N66oJFD6urWuSGSx1jJ16lQ6duzI9u3b+eCDD7jxxhudjiUStk55Ptxau9kYswCIA2oBXU85VTntPFgIqPRFIs2UKVMYP348l1xyCdOmTaNhw4ZORxIJaxUqfWNMDQKX010W/FULeI/AwrtZlZaujKK9hmKf1eY8IhGipKSEqKgohg4dit/v56abbsKj03siJ1XRvyXZwGsENty5BahvrR1urX3XWltUaenKwALFPosxUEN774u4mt/v57HHHqNz584UFBSQnJzMzTffrMIXKaOKDo2vBuZba32VGaYi/Dawct9aMEbT+yJutX37doYNG8a8efO49tprKSoqIi4uzulYItVKhUrfWjunsoNUVLDzqZ2gLXhF3GrWrFlkZmaSk5PDiy++yPXXX68f8kUqoNqfBLfB1o/2anpPxI38fj/33nsv9evXZ9GiRZx99tlORxKptqp96fuDI/3oKP3UL+Im33//PbVr1yYlJYV33nmH2rVrU6NGjZN/o4gcV5lK3xjzQHme1Fr7h4rFKb9D0/tbsvND9ZIiUsVef/11xo0bx4ABA5g6dSqNGzd2OpKIK5R1pF+eG09bIHSlT6D12zRMDtVLikgVycnJ4eabb+a1116jW7duPPBAucYbInISZSp9a215Sj+kDo30o7Uxj0i19vXXX/Pr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3nqL8847jxtuuAGAlJQUFb6IiIu5Ylsbj1bylUteXh5jx45lwIABtGnThueff97pSCIiEgLuKH11fplt3LiRTp06MXXqVO6++24+/PBDTj/9dKdjiYhICGjv/QhTr1496tevz1//+lcuueQSp+OIiEgIuWKkr84/sezsbG677TZyc3NJSEhgwYIFKnwRkQjkitLXSP/4lixZwnnnncdzzz3HRx995HQcERFxkCtKv6DY53SEsOPz+fjDH/5ARkYGMTExfPzxx/Tp08fpWCIi4iBXlH5irCuWJlSqO+64gwcffJDrrruOVatWkZ5eoUs6RUTERVzRlprdP8Ln8+H1ern11lvp2LEjmZmZTkcSEZEw4YrSB7V+QUEBEyZMYMuWLbz99tu0aNGCFi1aOB1LRETCiCum9yN9pL9u3Tq6dOnC5MmTadq0KT6f1jiIiMgvuWKkH6mdb63ltdde4+abbyYuLo733nuPfv36OR1LRETClDtKP0KH+vv372fChAl06tSJ6dOnc9pppzkdSUREwpg7St/pACH25Zdf0qZNG1JSUli6dCktWrTA6/U6HUtERMKczulXI36/nz//+c+0b9+ev/zlLwC0bNlShS8iImXikpG++1t/586dDB8+nFmzZnHNNdcwatQopyOJiEg1447Sd3nnL168mEGDBrF3716mTJnCDTfcELHrGEREpOJU+tVAXFwc9evXZ86cOZxzzjlOxxERkWrKHef0XTi9v3HjRiZPngxA586dWbVqlQpfREROiTtK32Wd/89//pPzzjuPBx98kB07dgDg8bjif5WIiDjIFU3iltLPzc3l+uuvZ9CgQbRt25bVq1dTv359p2OJiIhLuOOcvgum9/1+Pz169GDVqlXcc889TJw4kejoaKdjiYiIi7ij9Ktx51trgcD0/Z133kndunW5+OKLHU4lIiJu5I7pfacDVFB2djbXXHMNr732GgCDBg1S4YuISJVxR+lXw9ZfsmQJaWlpzJw5k9zcXKfjiIhIBHBF6Vensb7P52PSpElkZGQQFxfHxx9/zPjx452OJSIiEcAVpV+dRvpLlixh4sSJDB48mFWrVpGenu50JBERiRDuWMjndIAy2LRpE82bNycjI4NPP/2Uzp07Ox1JREQijEtG+uFb+wUFBdxyyy2cddZZrFmzBkCFLyIijtBIvwqtW7eOQYMGsWbN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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_roc_curve(fpr,tpr,label=None):\n",
    "    plt.plot(fpr,tpr,linewidth=2,label=label)\n",
    "    plt.plot([0,1],[0,1],'k--')\n",
    "    plt.axis([0,1,0,1])\n",
    "    plt.xlabel('假正类率',fontsize=16)\n",
    "    plt.ylabel('真正类lv',fontsize=16)\n",
    "\n",
    "plt.figure(figsize=(8,6))\n",
    "plot_roc_curve(fpr,tpr)\n",
    "plt.show()\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 计算曲线下面积AUC\n",
    "from sklearn.metrics import roc_auc_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9623354950362294"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "roc_auc_score(y_train_5,y_scores)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   * 召回率TPR越高，分类器的假正类FPR就越多\n",
    "   * 虚线表示纯随机分类器的ROC曲线，好的分类器应该远离这条线，向左上角\n",
    "   * 是使用精度/召回率PR曲线还是使用ROC，关键在于 正类非常少或者更关注假正类而不是假负类，选择PR反之ROC\n",
    "   * 例如：前面例子ROC曲线很不错是因为跟负类非5相比，正类数据5数量真的很少"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 训练随机森林分类器，比较SGD分类器的ROC曲线和ROC AUC 分数\n",
    "   * 获取训练集中每个案例的分数\n",
    "   * RandomForestClassifier没有descision_function(),但是拥有dict_proda()方法，sklearn中分类器都有这两个中的一个\n",
    "   * dict_proda返回一个矩阵，每行一个实例，每列代表一个类别的概率，比如这个图片70%是5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\ensemble\\weight_boosting.py:29: DeprecationWarning: numpy.core.umath_tests is an internal NumPy module and should not be imported. It will be removed in a future NumPy release.\n",
      "  from numpy.core.umath_tests import inner1d\n"
     ]
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier # 随机森林导入"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "forest_clf=RandomForestClassifier(n_estimators=10,random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_probas_forest=cross_val_predict(forest_clf,x_train,y_train_5,cv=3,method='predict_proba')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       ...,\n",
       "       [1., 0.],\n",
       "       [1., 0.],\n",
       "       [1., 0.]])"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_probas_forest"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 绘制ROC曲线，需要决策值，直接使用正类的概率作为决策值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_scores_forest=y_probas_forest[:,1]\n",
    "fpr_forest,tpr_forest,thresholds_forest=roc_curve(y_train_5,y_scores_forest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 0., 0., ..., 0., 0., 0.])"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_scores_forest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,6))\n",
    "plt.plot(fpr,tpr,'b:',linewidth=2,label='SGD')\n",
    "plot_roc_curve(fpr_forest,tpr_forest,'Random Forest')\n",
    "plt.legend(loc='lower right',fontsize=16)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 随机森林比SGD好很多，ROC AUC的分数也高很多"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9918945714769234"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "roc_auc_score(y_train_5,y_scores_forest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9833187006145742"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 随机森林的精度和召回率\n",
    "y_train_pred_forest=cross_val_predict(forest_clf,x_train,y_train_5,cv=3)\n",
    "precision_score(y_train_5,y_train_pred_forest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8264157904445675"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recall_score(y_train_5,y_train_pred_forest)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 总结\n",
    "   * 选择合适的指标利用交叉验证类对分类器进行评估\n",
    "   * 选择满足需求的精度/召回率权衡\n",
    "   * 使用ROC曲线和ROC AUC分数比较多个模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 多类别分类器\n",
    "   * 尝试5 之外的检测\n",
    "   * 多类别分类器 区分两个以上的类别\n",
    "   * 随机森林和朴素贝叶斯 可以直接处理多个类别\n",
    "   * 支持向量机SVM 和线性分类器只可以处理二元分类器"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 解决方案\n",
    "   1. 将数字图片分类0到9，训练10个二元分类器，每个数字一个，检测一张图片时，获取每个分类器的决策分数，哪个更高属于哪个，称为一对多OVA\n",
    "   2. 为每一对数字训练一个二元分类器，区分0，1，区分0，2，区分1，2称为一对一OVO策略，存在N个类别，需要N*（N-1）/2个分类器，最后看哪个类别获胜最多"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 优缺点\n",
    "   * OvO 只需要用到部分训练集对其必须区分两个类别进行训练\n",
    "   * 对于较小训练集合OvO 比较优势，大的训练集合OvA,速度快，所以OVA更常用，比如SVM，在数据规模扩大时表现糟糕\n",
    "   * sklearn 检查到使用二元分类算法进行多类别分类任务，会自动运行OVA，SVM分类器除外"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([5.])"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 重新训练模型\n",
    "sgd_clf.fit(x_train,y_train)\n",
    "sgd_clf.predict([some_digit])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " 内部实际上训练了10个二元分类器，获得图片的决策分数，然后选择了分数最高的类别\n",
    "返回10个分数，每个类别1个"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-121509.47102228, -556729.29487798, -368208.68057786,\n",
       "        -120385.13317522, -402552.10183273,  114959.3393978 ,\n",
       "        -634317.86619463, -327469.17081822, -704666.37325849,\n",
       "        -467322.5248848 ]])"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "some_digit_scores=sgd_clf.decision_function([some_digit])\n",
    "some_digit_scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.argmax(some_digit_scores)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "目标类别列表会存储在classes_这个属性中，按值大小排列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sgd_clf.classes_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5.0"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sgd_clf.classes_[np.argmax(some_digit_scores)]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 使用OVO策略，一对一或一对多"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.multiclass import OneVsOneClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([5.])"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ovo_clf=OneVsOneClassifier(SGDClassifier(max_iter=5,tol=-np.infty,random_state=42))\n",
    "ovo_clf.fit(x_train,y_train)\n",
    "ovo_clf.predict([some_digit])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "45"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(ovo_clf.estimators_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 使用随机森林"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([5.])"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "forest_clf.fit(x_train,y_train)\n",
    "forest_clf.predict([some_digit])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 随机森林直接将实例分为多个类别，调用predict_proba()可以获得分类器将每个实例分类为每个类别的概率列表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.1, 0. , 0. , 0.1, 0. , 0.8, 0. , 0. , 0. , 0. ]])"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "forest_clf.predict_proba([some_digit])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 评估分类器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([0.85502899, 0.86704335, 0.87688153])"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 使用交叉验证评估SGD的准确率\n",
    "cross_val_score(sgd_clf,x_train,y_train,cv=3,scoring='accuracy')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 将输入进行简单缩放 可以得到准确率90%以上"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([0.91166767, 0.90979549, 0.90908636])"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scaler=StandardScaler()\n",
    "x_train_scaled=scaler.fit_transform(x_train.astype(np.float64))\n",
    "cross_val_score(sgd_clf,x_train_scaled,y_train,cv=3,scoring='accuracy')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 错误分析"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 项目流程\n",
    "    1. 探索数据准备的选项\n",
    "    2. 尝试多个模型\n",
    "    3. 选择最佳模型并用GridSearchCV 对参数进行微调\n",
    "    4. 尽可能自动化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 确定了一个相对合适的模型，进一步优化，分析其错误类型\n",
    "   * 查看混淆矩阵\n",
    "   * 使用cross_val_predict()进行预测\n",
    "   * 调用confusion_matrix()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n",
      "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\sklearn\\linear_model\\stochastic_gradient.py:128: FutureWarning: max_iter and tol parameters have been added in <class 'sklearn.linear_model.stochastic_gradient.SGDClassifier'> in 0.19. If both are left unset, they default to max_iter=5 and tol=None. If tol is not None, max_iter defaults to max_iter=1000. From 0.21, default max_iter will be 1000, and default tol will be 1e-3.\n",
      "  \"and default tol will be 1e-3.\" % type(self), FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[5726,    2,   27,   11,    9,   43,   50,    9,   40,    6],\n",
       "       [   2, 6481,   39,   29,    6,   42,    7,    7,  116,   13],\n",
       "       [  53,   33, 5332,  102,   83,   25,   99,   53,  163,   15],\n",
       "       [  53,   37,  136, 5357,    4,  222,   43,   51,  130,   98],\n",
       "       [  20,   26,   39,    9, 5338,   10,   64,   25,   77,  234],\n",
       "       [  77,   39,   32,  193,   74, 4601,  120,   24,  163,   98],\n",
       "       [  32,   27,   47,    2,   31,   93, 5639,    2,   44,    1],\n",
       "       [  26,   20,   67,   33,   51,   11,   10, 5765,   15,  267],\n",
       "       [  55,  139,   70,  165,   10,  151,   61,   22, 5036,  142],\n",
       "       [  43,   34,   25,   86,  137,   37,    2,  173,   76, 5336]],\n",
       "      dtype=int64)"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train_pred=cross_val_predict(sgd_clf,x_train_scaled,y_train,cv=3)\n",
    "conf_mx=confusion_matrix(y_train,y_train_pred)\n",
    "conf_mx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 使用matplotlib的matshow函数来查看混淆矩阵的图像表示\n",
    "plt.matshow(conf_mx,cmap=plt.cm.gray)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   * 大多数图片都在主对角线上，说明他们被正确分类\n",
    "   * 数字5 看起来比较暗，说明1.数字5图片比较少  2.分类器在数字5上执行效果不如其他数字好\n",
    "   * 假设把焦点放在错误上，为取得错误率，而不是错误绝对值，需要将混淆矩阵中每个值除以相应类别中的图片数量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [],
   "source": [
    "row_sums=conf_mx.sum(axis=1,keepdims=True)\n",
    "norm_conf_mx=conf_mx/row_sums"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 用0填充对角线，只保留错误，重新绘制\n",
    "np.fill_diagonal(norm_conf_mx,0)\n",
    "plt.matshow(norm_conf_mx,cmap=plt.cm.gray)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   * 每行代表实际类别，每列代表预测类别\n",
    "   * 8，9列比较亮，说明很多图片被错误的分类为数字8，9\n",
    "   * 类别8，9行也比较亮，说明数字8，9经常会跟其他数字混淆\n",
    "   * 有些很暗，比如行1，大多数数字1都被正确的分类一些和8混淆\n",
    "   * 5和3是错误最多的"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 结论"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   * 改进数字8和9 的分类\n",
    "   * 修正3和5的混淆"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 如何优化分类器\n",
    "   * 尝试多收集这些数字的训练集\n",
    "   * 开发一些新特征来改进分类器\n",
    "   * 优化分类器算法\n",
    "   * 使用pillow和opencv对图片预处理，让显示模型更突出\n",
    "   * 分析单个错误"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_digits(instances,images_per_row=10,**options):\n",
    "    size=28\n",
    "    images_per_row=min(len(instances),images_per_row)\n",
    "    images=[instance.reshape(size,size) for instance in instances]\n",
    "    n_rows=(len(instances)-1) // images_per_row + 1\n",
    "    row_images=[]\n",
    "    n_empty=n_rows*images_per_row-len(instances)\n",
    "    images.append(np.zeros((size,size*n_empty)))\n",
    "    for row in range(n_rows):\n",
    "        rimages=images[row*images_per_row : (row+1)*images_per_row]\n",
    "        row_images.append(np.concatenate(rimages,axis=1))\n",
    "    images=np.concatenate(row_images,axis=0)\n",
    "    plt.imshow(images,cmap=matplotlib.cm.binary,**options)\n",
    "    plt.axis('off')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 查看数字3和5的例子\n",
    "cl_a,cl_b=3,5\n",
    "x_aa=x_train[(y_train==cl_a)&(y_train_pred==cl_a)]\n",
    "x_ab=x_train[(y_train==cl_a)&(y_train_pred==cl_b)]\n",
    "x_ba=x_train[(y_train==cl_b)&(y_train_pred==cl_a)]\n",
    "x_bb=x_train[(y_train==cl_b)&(y_train_pred==cl_b)]\n",
    "\n",
    "plt.figure(figsize=(8,8))\n",
    "plt.subplot(221);\n",
    "plot_digits(x_aa[:25],images_per_row=5)\n",
    "plt.subplot(222);\n",
    "plot_digits(x_ab[:25],images_per_row=5)\n",
    "plt.subplot(223);\n",
    "plot_digits(x_ba[:25],images_per_row=5)\n",
    "plt.subplot(224);\n",
    "plot_digits(x_bb[:25],images_per_row=5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   * 左侧两个是被分类为3的图片\n",
    "   * 右侧两个是被分类为5的图片\n",
    "   * 大多数错误分类的图片看起来还是非常明显的错误\n",
    "   * 原因：SGD是一个线性模型，它所做就是为每个像素分配一个各个类别的权重，当他看到新的图像，将加权后的像素强度汇总，从而得到一个分数进行分类\n",
    "   * 数字3和5在一部分像素位上有区别，所以分类器很容易将其弄混\n",
    "   * 通过上面图像，如果书写3的连接点左移，分类器可能将其分类为数字5，这个分类器对图像位移和旋转敏感\n",
    "   * 减少混淆的方法之一，就是对图像进行预处理，确保位于中心位置并且没有旋转"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 多标签分类\n",
    "   * 为每个实例产生多个类别，例如照片识别多个人脸\n",
    "   * 分类器经过训练可以识别小红，小白，小军，一张照片里有小红，小白\n",
    "   * 经过分类器，应该输出(1，1，0)，是小红，小白，不是小军\n",
    "   * 输出多个二元标签的分类系统称为多标签分类系统"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.neighbors import KNeighborsClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n",
       "           metric_params=None, n_jobs=1, n_neighbors=5, p=2,\n",
       "           weights='uniform')"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train_large=(y_train>=7)\n",
    "y_train_odd=(y_train%2==1)\n",
    "y_multilabel=np.c_[y_train_large,y_train_odd]\n",
    "knn_clf=KNeighborsClassifier()\n",
    "knn_clf.fit(x_train,y_multilabel)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[False,  True]])"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "knn_clf.predict([some_digit])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   * 评估多标签分类器方法很多，方法之一就是测量每个标签的F1分数，或者其他二元分类器指标，然后简单评估"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [],
   "source": [
    "# y_train_knn_pred=cross_val_predict(knn_clf,x_train,y_multilabel,cv=3)\n",
    "# f1_score(y_multilabel,y_train_knn_pred,average='macro')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 尝试使用网格搜索确定最佳参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [],
   "source": [
    "# from sklearn.model_selection import GridSearchCV\n",
    "# param_grid = [\n",
    "#          {\n",
    "#              'weights':['uniform'],\n",
    "#              'n_neighbors': [i for i in range(1,5)]\n",
    "#          },\n",
    "#          {\n",
    "#              'weights': ['distance'],\n",
    "#              'n_neighbors': [i for i in range(1,5)],\n",
    "#              'p': [i for i in range(1,6)]\n",
    "#          }\n",
    "#      ]\n",
    "# knn_clf_better=KNeighborsClassifier()\n",
    "# grid_search_better=GridSearchCV(knn_clf_better,param_grid)\n",
    "# grid_search_better.fit(x_train,y_train_5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 确定最佳参数\n",
    "# grid_search_better.best_params_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,  26, 113, 113, 114, 113, 113, 113,\n",
       "        113, 114, 113, 113, 128, 253, 255, 253, 196,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0, 104, 252, 252, 253, 252, 252, 252,\n",
       "        252, 253, 252, 252, 252, 252, 253, 252, 195,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0, 153, 195, 195, 222, 252, 252, 252,\n",
       "        252, 253, 201, 195, 195, 227, 253, 252, 195,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,  38,  84,  84,  84,\n",
       "         84,  84,   9,   0,   0, 140, 253, 252, 102,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0,   0,   0,   0, 140, 253, 204,  25,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0,   0,   0,  92, 253, 255,  27,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0,   0,  51, 243, 252, 253,  27,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0,   0,  88, 252, 220, 133,   6,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0,  73, 234, 249,  99,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,  63, 240, 252, 223,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0, 176, 253, 228,  47,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "        126, 253, 252, 148,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  54,\n",
       "        227, 253, 154,  12,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  38, 224,\n",
       "        252, 240,  24,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  57, 252,\n",
       "        252, 140,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  38, 222, 253,\n",
       "        190,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 131, 252, 252,\n",
       "        112,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 225, 252, 252,\n",
       "        112,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 225, 252, 252,\n",
       "        112,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 146, 252, 157,\n",
       "         50,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0],\n",
       "       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
       "          0,   0]], dtype=uint8)"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tx=x_train[1].reshape(28,28)\n",
    "tx[1:,:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 平移图片重新计算精度，召回率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义平移方法\n",
    "# def image_offset(data_s,dir='u'):\n",
    "#     size=len(data_s)\n",
    "#     en_ret=np.zeros((size,784))\n",
    "#     if dir=='u':\n",
    "#         for i in range(size):\n",
    "#             trans_data = np.append(data_s[i][1:,:], data_s[i][0:1,:],axis=0)\n",
    "#             en_ret[i]=trans_data.reshape(1,-1)\n",
    "#     elif dir=='d':\n",
    "#         for i in range(size):\n",
    "#             trans_data=np.append(data_s[i][-1:,:],data_s[i][:-1,:],axis=0)\n",
    "#             en_ret[i]=trans_data.reshape(1,-1)\n",
    "#     elif dir=='l':\n",
    "#         for i in range(size):\n",
    "#             trans_data=np.append(data[i][:,1:],data_s[i][:,0:1],axis=1)\n",
    "#             en_ret[i]=trans_data.reshape(1,-1)\n",
    "#     elif dir=='r':\n",
    "#         for i in range(size):\n",
    "#             trans_data=np.append(data_s[i][:,-1:],data_s[i][:,:-1],axis=1)\n",
    "#             en_ret[i]=trans_data.reshape(1,-1)\n",
    "#     return en_ret\n",
    "def image_offset(data_s,direc='u'):\n",
    "    size=len(data_s)\n",
    "    en_ret = np.zeros((size, 784))\n",
    "    if direc == 'u':        \n",
    "        for i in range(size):\n",
    "            some_data=data_s[i].reshape(28,28)\n",
    "            trans_data = np.append(some_data[1:,:], some_data[0:1,:],axis=0)\n",
    "            #print(trans_data.shape)\n",
    "            en_ret[i] = trans_data.reshape(1, -1)\n",
    "    elif direc == 'd':\n",
    "        for i in range(size):\n",
    "            some_data=data_s[i].reshape(28,28)\n",
    "            trans_data = np.append(some_data[-1:,:], some_data[:-1,:],axis=0)\n",
    "            #print(trans_data.shape)\n",
    "            en_ret[i] = trans_data.reshape(1, -1)\n",
    "    elif direc == 'l':\n",
    "        for i in range(size):\n",
    "            some_data=data_s[i].reshape(28,28)\n",
    "            trans_data = np.append(some_data[:,1:], some_data[:,0:1],axis=1)\n",
    "            #print(trans_data.shape)\n",
    "            en_ret[i] = trans_data.reshape(1, -1)\n",
    "    elif direc == 'r':\n",
    "        for i in range(size):\n",
    "            some_data=data_s[i].reshape(28,28)\n",
    "            trans_data = np.append(some_data[:,-1:], some_data[:,:-1],axis=1)\n",
    "            #plt.imshow(trans_data, cmap = matplotlib.cm.binary,interpolation=\"nearest\")\n",
    "            en_ret[i] = trans_data.reshape(1, -1)\n",
    "    return en_ret"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 得到平移后各个方向的训练集\n",
    "x_train_u=image_offset(x_train,direc='u')\n",
    "x_train_d=image_offset(x_train,direc='d')\n",
    "x_train_l=image_offset(x_train,direc='l')\n",
    "x_train_r=image_offset(x_train,direc='r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train_new=np.concatenate((x_train,x_train_u,x_train_d,x_train_l,x_train_r),axis=0)\n",
    "y_train_new=np.concatenate((y_train,y_train,y_train,y_train,y_train),axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [],
   "source": [
    "kn_clf_new=KNeighborsClassifier()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True])"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train_new_5=(y_train_new.astype(int)==5)\n",
    "kn_clf_new.fit(x_train_new,y_train_new_5)\n",
    "kn_clf_new.predict([some_digit])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train_new_pred=cross_val_predict(kn_clf_new,x_train_new,y_train_new_5,cv=3)\n",
    "precision=precision_score(y_train_new_5,y_train_new_pred)\n",
    "recall=recall_score(y_train_new_5,y_train_new_pred)\n",
    "print('precision:{:.1f}%'.format(precision*100))\n",
    "print('recall:{:.1f}%'.format(recall*100))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   * 假设所有标签都同等重要，也可以给每个标签设置一个权重 设置average=weighted"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 多输出分类"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 例子：构建一个系统去除图片中的噪声，输入一张有噪声的图片，它将输入一张干净的数字图片，分类器输出是多个标签，一个像素一个标签，每个标签多值0到255"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 增加噪声，目标将图片还远为原始图片，创建训练集和测试集\n",
    "noise=np.random.randint(0,100,(len(x_train),784))\n",
    "x_train_mod=x_train+noise\n",
    "noise=np.random.randint(0,100,(len(x_test),784))\n",
    "x_test_mod=x_test+noise\n",
    "y_train_mod=x_train\n",
    "y_test_mod=x_test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "some_index=5500\n",
    "plt.subplot(121);\n",
    "plt.imshow(x_test_mod[some_index].reshape(28,28),cmap=matplotlib.cm.binary)\n",
    "plt.subplot(122);\n",
    "plt.imshow(y_test_mod[some_index].reshape(28,28),cmap=matplotlib.cm.binary)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "knn_clf.fit(x_train_mod,y_train_mod)\n",
    "clean_digit=knn_clf.predict([x_test_mod[some_index]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.imshow(clean_digit.reshape(28,28),cmap=matplotlib.cm.binary)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
